import 'package:flutter/material.dart';
// import 'dart:math'; // Dart核心库
// import 'package:http/http.dart'; // 第三方包
// import 'my_file.dart'; // 相对导入
// import 'package:my_app/my_file.dart'; // 包导入

/// Dart库和导入示例
class LibrariesExample extends StatefulWidget {
  const LibrariesExample({super.key});

  @override
  State<LibrariesExample> createState() => _LibrariesExampleState();
}

class _LibrariesExampleState extends State<LibrariesExample> {
  String result = '点击下方按钮查看库和导入示例';

  void _demonstrateImportBasics() {
    setState(() {
      result = '''
【基本导入语法】

1. 导入Dart核心库:
import 'dart:core';      // 核心库（默认导入）
import 'dart:async';     // 异步编程
import 'dart:io';        // I/O操作
import 'dart:math';      // 数学函数
import 'dart:convert';   // 编码解码

2. 导入第三方包:
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:shared_preferences/shared_preferences.dart';

3. 导入项目文件:
// 相对路径导入
import 'widgets/my_widget.dart';
import '../utils/helper.dart';

// 包导入（推荐）
import 'package:my_app/widgets/my_widget.dart';
import 'package:my_app/utils/helper.dart';

4. 导入类型:
• 绝对导入：从包根目录开始
• 相对导入：相对于当前文件
      ''';
    });
  }

  void _demonstrateImportAs() {
    setState(() {
      result = '''
【使用别名导入 (as)】
当两个库有相同名称的类时使用别名。

import 'package:lib1/lib1.dart' as lib1;
import 'package:lib2/lib2.dart' as lib2;

// 使用
lib1.MyClass instance1 = lib1.MyClass();
lib2.MyClass instance2 = lib2.MyClass();

实际例子:
import 'dart:html' as html;
import 'package:flutter/material.dart';

void main() {
  // html.window 不会和其他window冲突
  html.window.console.log('Hello');
}

常见场景:
import 'package:flutter/foundation.dart' as foundation;
import 'package:flutter/material.dart';

// 使用
if (foundation.kDebugMode) {
  print('Debug模式');
}
      ''';
    });
  }

  void _demonstrateShowHide() {
    setState(() {
      result = '''
【选择性导入 (show/hide)】

1. show - 只导入特定成员:
import 'package:flutter/material.dart' show 
  Widget, 
  StatelessWidget, 
  BuildContext;

// 只能使用导入的类
Widget build(BuildContext context) {
  return Container(); // ✗ 错误：Container未导入
}

2. hide - 排除特定成员:
import 'package:flutter/material.dart' hide Colors;

// 可以使用除Colors外的所有类
Widget build() {
  return Text('Hello'); // ✓
  var color = Colors.red; // ✗ 错误：Colors被排除
}

3. 结合使用:
// 从lib1只导入ClassA
import 'package:lib1/lib1.dart' show ClassA;

// 从lib2导入除ClassB外的所有
import 'package:lib2/lib2.dart' hide ClassB;

// 使用别名+选择性导入
import 'package:lib3/lib3.dart' as lib3 show ClassC;

使用场景:
• 避免命名冲突
• 减小编译体积
• 明确依赖关系
      ''';
    });
  }

  void _demonstrateExport() {
    setState(() {
      result = '''
【导出 (export)】
将其他库的内容重新导出，创建统一的API入口。

文件结构:
lib/
  models/
    user.dart
    product.dart
    order.dart
  models.dart  ← 统一导出文件

models.dart内容:
export 'models/user.dart';
export 'models/product.dart';
export 'models/order.dart';

使用方:
// 之前：需要多个导入
import 'package:my_app/models/user.dart';
import 'package:my_app/models/product.dart';
import 'package:my_app/models/order.dart';

// 现在：一次导入
import 'package:my_app/models.dart';

选择性导出:
export 'user.dart' show User;
export 'product.dart' hide InternalProduct;

Flutter框架示例:
// material.dart导出了很多子库
export 'widgets/app.dart';
export 'widgets/scaffold.dart';
// ... 数百个导出

所以我们只需要:
import 'package:flutter/material.dart';
      ''';
    });
  }

  void _demonstratePartOf() {
    setState(() {
      result = '''
【库分割 (part/part of)】
将一个库分割成多个文件。

主文件 - user_manager.dart:
library user_manager;

part 'user_model.dart';
part 'user_service.dart';

class UserManager {
  // 可以访问所有part文件的私有成员
}

部分文件 - user_model.dart:
part of user_manager;

class User {
  final String name;
  User(this.name);
}

部分文件 - user_service.dart:
part of user_manager;

class UserService {
  // 可以访问User类
  void createUser(User user) { }
}

注意:
• part文件不能单独导入
• part文件共享同一个命名空间
• 私有成员(_开头)在整个库中可见

现代替代方案:
推荐使用普通import/export代替part/part of：
• 更清晰的依赖关系
• 更好的IDE支持
• 更灵活的代码组织
      ''';
    });
  }

  void _demonstrateCommonLibraries() {
    setState(() {
      result = '''
【常用Dart核心库】

1. dart:core (默认导入)
   基础类型、集合、日期等
   int, String, List, Map, DateTime...

2. dart:async
   异步编程支持
   Future, Stream, async/await

3. dart:convert
   JSON、UTF-8等编解码
   jsonEncode(), jsonDecode()

4. dart:io
   文件、网络、进程操作（不支持Web）
   File, Directory, HttpClient

5. dart:math
   数学计算
   Random, sin, cos, sqrt, max, min

6. dart:collection
   额外的集合类
   HashMap, LinkedList, Queue

使用示例:
import 'dart:async';
import 'dart:convert';
import 'dart:math';

Future<void> example() async {
  // dart:convert
  String json = jsonEncode({'name': 'Alice'});
  
  // dart:math
  var random = Random();
  int dice = random.nextInt(6) + 1;
  
  // dart:async
  await Future.delayed(Duration(seconds: 1));
}
      ''';
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Dart 库和导入'),
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
      ),
      body: SingleChildScrollView(
        padding: const EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            // 说明卡片
            Card(
              color: Colors.teal.shade50,
              child: const Padding(
                padding: EdgeInsets.all(16),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Text(
                      '📚 库和导入概述',
                      style: TextStyle(
                        fontSize: 18,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                    SizedBox(height: 8),
                    Text(
                      'Dart的模块化系统：\n'
                      '• import: 导入库\n'
                      '• export: 重新导出\n'
                      '• as: 使用别名\n'
                      '• show/hide: 选择性导入\n'
                      '• part/part of: 库分割',
                      style: TextStyle(fontSize: 14),
                    ),
                  ],
                ),
              ),
            ),
            const SizedBox(height: 16),

            // 代码示例区域
            Container(
              padding: const EdgeInsets.all(16),
              decoration: BoxDecoration(
                color: Colors.grey.shade200,
                borderRadius: BorderRadius.circular(8),
              ),
              child: const Text(
                '''// 基本导入
import 'dart:math';
import 'package:flutter/material.dart';

// 使用别名
import 'package:lib/lib.dart' as lib;

// 选择性导入
import 'dart:io' show File;
import 'dart:async' hide Timer;

// 导出
export 'models/user.dart';

// 库分割
part 'part_file.dart';
part of 'main_file.dart';''',
                style: TextStyle(
                  fontFamily: 'monospace',
                  fontSize: 13,
                ),
              ),
            ),
            const SizedBox(height: 16),

            // 交互按钮
            Wrap(
              spacing: 8,
              runSpacing: 8,
              children: [
                ElevatedButton.icon(
                  onPressed: _demonstrateImportBasics,
                  icon: const Icon(Icons.import_export),
                  label: const Text('基本导入'),
                ),
                ElevatedButton.icon(
                  onPressed: _demonstrateImportAs,
                  icon: const Icon(Icons.label),
                  label: const Text('别名 (as)'),
                ),
                ElevatedButton.icon(
                  onPressed: _demonstrateShowHide,
                  icon: const Icon(Icons.visibility),
                  label: const Text('show/hide'),
                ),
                ElevatedButton.icon(
                  onPressed: _demonstrateExport,
                  icon: const Icon(Icons.publish),
                  label: const Text('export导出'),
                ),
                ElevatedButton.icon(
                  onPressed: _demonstratePartOf,
                  icon: const Icon(Icons.splitscreen),
                  label: const Text('part/part of'),
                ),
                ElevatedButton.icon(
                  onPressed: _demonstrateCommonLibraries,
                  icon: const Icon(Icons.library_books),
                  label: const Text('常用库'),
                ),
              ],
            ),
            const SizedBox(height: 16),

            // 结果展示区域
            Card(
              elevation: 4,
              child: Container(
                width: double.infinity,
                padding: const EdgeInsets.all(16),
                constraints: const BoxConstraints(minHeight: 150),
                child: Text(
                  result,
                  style: const TextStyle(
                    fontSize: 14,
                    fontFamily: 'monospace',
                  ),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

